package com.ftg.learn.mapper;

import com.mysql.cj.jdbc.MysqlDataSource;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import java.util.List;
import java.util.Map;

/**
 * @author kangjx
 * @createTime 2022/11/24
 */
public class StudentDao1 {

    public static void main(String[] args) {

        Configuration conf = new Configuration();
        // 指定settings
        //设置 setting里面的日志 打印功能
        conf.setLogImpl(StdOutImpl.class);
        conf.setCacheEnabled(true);
        conf.setLazyLoadingEnabled(true);

        //环境
        TransactionFactory tf = new JdbcTransactionFactory();
        MysqlDataSource mysqlDataSource = new MysqlDataSource();
        mysqlDataSource.setURL("jdbc:mysql://localhost:3306/ad");
        mysqlDataSource.setPassword("Love0913@kjx");
        mysqlDataSource.setUser("root");
        Environment e = new Environment("localmysql", tf, mysqlDataSource);
        conf.setEnvironment(e);

//        //想把一个没有接口的原始生的xml添加到我们的mybatis
        //找到他原生的解析方式来自行调用一次
//        conf.addMappers("student.xml");
        //接口+xml
        //我把student.xml也通过java映射到我们配置当中

        //mybatis  接口开发模式 [就是通过解析java接口 拿到参数类型 、 返回类型  方法名称 要执行这的sql类型[insert select] sql语句 ]

//        mybatis的配置文件有几类
//        配置文件  configuration
//        映射 文件  mapper
        //mybatis 映射文件有几种类型 ：
        // 二种
        // 一种.student.xml
        // 二种 接口
//        mybatis配置映射文件有向种方法
//        第一种  xml
//            通过xml配置映射文件的方式有几种
//             三种
//                mapper url
//                mapper resources
//                mapper class
//        第二种 java配置

        conf.addMapper(StudentMapper.class);

//        MapperRegistry  里面的集合  knownMappers添加一个entry
//          key StudentMapper.class  value MapperProxyFactory(StudentMapper.class)


        SqlSessionFactory ssb = new SqlSessionFactoryBuilder()
                .build(conf);
        SqlSession sqlSession = ssb.openSession();
        //你在mappedstatment里面存储的  knownMappers 这里面存储的是你的接口
        StudentMapper studentMapper =  sqlSession.getMapper(StudentMapper.class);
        System.out.println(studentMapper.showall());

//        sqlSession.getConfiguration()  取到     SqlSessionFactory里面的 conf



        //builder方式
//        MysqlDataSource mysqlDataSource1 = new MysqlDataSource();
//        mysqlDataSource1.setURL("jdbc:mysql://localhost:3306/ad");
//        mysqlDataSource1.setPassword("Love0913@kjx");
//        mysqlDataSource1.setUser("root");
//        Environment e1 = new Environment.Builder("localmysql01")
//                .transactionFactory(new JdbcTransactionFactory())
//                .dataSource(mysqlDataSource1)
//                .build();
//        conf.setEnvironment(e1);


        //sqlmapper

    }

}
